home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
AMICUS
/
AMICUS08.ADF
/
AmigaBasicProgs
/
Othello
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1986-04-02
|
7KB
|
262 lines
LIBRARY "graphics.library"
PRINT:PRINT:PRINT
PRINT SPC(28);"Converted to AmigaBasic"
PRINT
PRINT SPC(39);"By"
PRINT
PRINT SPC(35);"Rick Wirch"
PRINT
PRINT SPC(26);"Press Mouse Button to Start"
WHILE B=0: B= MOUSE(0): WEND
WHILE B<>0:B= MOUSE(0): WEND
10 REM OTHELLO
20 DIM A(10,10),I4(9),J4(9),strat%(10,10)
30 FOR i=1 TO 10: FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i
40 SCREEN 1,640,200,3,2
50 CLS
60 COLOR 1
70 DIM green%(1), red%(1),gblock%(500),square%(1000)
80 green%(0)=0: red%(0)=&Hffff
90 w=39:h=17: pc=1: REM width and height of board squares
100 WINDOW 2,"Board",(250,11)-(629,186),0,1: WINDOW OUTPUT 2
RP& = WINDOW( 8)
110 WINDOW 3,"Othello",(0,11)-(238,186),0,1: REM
120 WINDOW OUTPUT 2:COLOR 1
125 PALETTE 0, 6/15, 9/15, 15/15:PALETTE 1, 1,1,1: PALETTE 2, 0,0,0
130 PALETTE 4, 14/15, 3/15, 0/15:PALETTE 5, 5/15, 13/15, 0/15
140 f2=0
150 GOSUB 1560
200 FOR i=1 TO 10:FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i
210 PRINT"Shall I use my best strategy?"
PRINT"(Click Yes OR No)": GOSUB 2200
220 IF x$="N" THEN 280
230 IF x$<>"Y" THEN 210
240 DATA 4,-1,2,2,2,2,-1,4
250 FOR i=2 TO 9 STEP 7:RESTORE 240: FOR j=2 TO 9:READ strat%(i,j): NEXT j,i
260 FOR j=2 TO 9 STEP 7: RESTORE 240: FOR i=2 TO 9:READ strat%(i,j): NEXT i,j
270 FOR i=3 TO 8 STEP 5:FOR j=3 TO 8 STEP 5:strat%(i,j)=-1:NEXT j,i
280 B=-1: Wt=1
290 RESTORE 310
300 FOR K =2 TO 9:READ I4(K):NEXT
310 DATA 0,-1,-1,-1,0,1,1,1
320 FOR K =2 TO 9:READ J4(K): NEXT
330 DATA 1,1,0,-1,-1,-1,0,1
340 FOR i = 1 TO 10: FOR j = 1 TO 10: A(i,j)=0:NEXT j,i
350 A(5,5)=Wt:A(6,6)=Wt:A(5,6)=B:A(6,5)=B
360 C1 =2:H1 =2: Z =0
370 N1 =4
380 hu=Wt:c=B
390 WINDOW OUTPUT 3 :PRINT "You will play White."
400 GOSUB 1560 : REM draw board and pieces.
410 PRINT"Do you want to go first?"
PRINT"(Click Y OR N)"
420 GOSUB 2200
430 IF x$ = "N" THEN 460
440 IF x$<>"Y" THEN 410
450 GOTO 790
460 PRINT"I'm thinking.": B1=-1:J3=0:I3=0:T1=c:T2=hu
470 FOR i = 2 TO 9
480 FOR j = 2 TO 9
490 IF A(i,j)<>0 THEN 580
500 GOSUB 1340
510 IF F1 = 0 THEN 580
520 U=-1:GOSUB 1420: IF S1=0 THEN 580
530 S1=S1+strat%(i,j)
540 IF S1<B1 THEN 580
550 IF S1>B1 THEN 570
560 IF RND(100)>50 THEN 580
570 B1 = S1: I3 = i:J3 = j
580 NEXT j,i
590 IF B1>0 THEN 630
600 PRINT"I have to forfeit my move."
610 IF Z = 1 THEN 1060
620 Z = 1: GOTO 790
630 Z=0
640 PRINT"I'll circle my next move"
650 pc=0:x=I3-2:y=J3-2:WINDOW OUTPUT 2:GOSUB 1720:pc=1
660 i=I3:j=J3:GOSUB 1420: REM get # captured pieces.
670 C1=C1+S1+1:H1=H1-S1:N1=N1+1
680 PRINT"That will give me"
690 PRINT S1;" of your pieces."
700 IF f2=0 THEN SLEEP: GOTO 760
710 PRINT"Click left button when"
720 PRINT"you're ready for me to"
730 PRINT"complete my play."
740 '
750 B% = MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2):IF B%=0 THEN GOTO 750
755 WHILE B%<>0: B%= MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2): WEND
760 i=I3:j=J3:U=1:GOSUB 1420: REM flip captured pieces
770 IF H1=0 THEN 1060
780 IF N1=64 THEN 1060
790 T1=hu:T2=c
800 PRINT "Click on your move square."
810 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3
820 IF y>7 AND y<10 THEN
IF x>0 AND x<4 THEN
pr% = 2
ELSEIF x>3 AND x<7 THEN
pr% = 1
ELSE
pr% = 4
END IF
ELSE
IF y>-1 AND y<8 AND x>-1 AND x<8 THEN pr%=3 :ELSE pr%=4
END IF
830 ON pr% GOTO 1280,840,880,800
840 PRINT"You are forfeiting your turn."
850 IF Z=1 THEN 1060
860 Z=1
870 GOTO 460
880 i=x+2: j=y+2: IF A(i,j)=0 THEN 910
890 PRINT"Sorry; that square is"
900 PRINT"occupied; try again.": GOTO 800
910 GOSUB 1340: IF F1=1 THEN 950
920 PRINT"Sorry; you're not next to "
930 PRINT " one of my pieces;"
940 PRINT"Try again.":GOTO 800
950 U=-1: GOSUB 1420: IF S1>0 THEN 990
960 PRINT"Sorry, that doesn't flank"
970 PRINT"a row; try again."
980 GOTO 800
990 Z=0:PRINT"That gives you "
1000 PRINT S1;" of my pieces."
1010 U=1: GOSUB 1420
1020 H1=H1+S1+1: C1=C1-S1: N1=N1+1
1030 IF C1=0 THEN 1060
1040 IF N1=64 THEN 1060
1050 GOTO 460
1060 PRINT: PRINT"You have ";H1;" pieces,"
1070 PRINT "and I have ";C1;" pieces."
1080 IF H1=C1 THEN 1120
1090 IF H1>C1 THEN 1130
1100 PRINT"Sorry, I won that one."
1110 GOTO 1140
1120 PRINT"A Tie!": GOTO 1270
1130 PRINT"YOU WON!!"
1140 C1=C1-H1: IF C1>0 THEN 1160
1150 C1=-C1
1160 C1=64*C1/N1
1170 PRINT"That was a ";
1180 IF C1<11 THEN 1260
1190 IF C1<25 THEN 1250
1200 IF C1<39 THEN 1240
1210 IF C1<53 THEN 1230
1220 PRINT"PERFECT GAME!": GOTO 1270
1230 PRINT"Walkaway.": GOTO 1270
1240 PRINT"Real Fight.": GOTO 1270
1250 PRINT"Hot Game!": GOTO 1270
1260 PRINT"Squeaker!!"
1270 PRINT
1280 PRINT"Do you want to play another "
PRINT"game? (Click Y OR N)"
1290 GOSUB 2200
1300 IF x$="Y" THEN RESTORE 310: GOTO 200
1310 PRINT"Thanks for playing!"
1320 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1
1330 END
1340 F1=0: FOR I1 = -1 TO 1
1350 FOR J1= -1 TO 1
1360 IF A(i+I1, j+J1)=T2 THEN F1=1:I1=1:J1=1
1370 NEXT J1, I1
1380 RETURN
1390 REM
1400 REM
1410 REM
1420 S1=0
1430 FOR K=2 TO 9:I5=I4(K):J5=J4(K):I6=i+I5:J6=j+J5
1440 S3=0: IF A(I6,J6)<>T2 THEN 1510
1450 S3=S3+1:I6=I6+I5:J6=J6+J5:IF A(I6,J6)=T1 THEN 1480
1460 IF A(I6,J6)=0 THEN 1510
1470 GOTO 1450
1480 S1=S1+S3: IF U<>1 THEN 1510
1490 I6=i:J6=j: FOR K1=0 TO S3
1500 A(I6,J6)=T1: GOSUB 2180: I6=I6+I5:J6=J6+J5:NEXT K1
1510 NEXT K
1520 RETURN
1530 REM
1540 REM
1550 REM
1560 WINDOW OUTPUT 2: GOSUB 1890: REM Draw Game Board
1570 FOR i=2 TO 9: FOR j=2 TO 9
1580 state%=A(i,j)+2: x=i-2: y=j-2
1590 ON state% GOSUB 1690, 1700, 1680
1600 NEXT j,i
1610 WINDOW OUTPUT 3: COLOR 1
1620 RETURN
1630 REM ***** end routine *****
1640 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1
1650 REM
1660 END
1670 REM ***** the white and black piece plotters *****
1680 WINDOW OUTPUT 2: COLOR 1: GOTO 1720: REM white piece maker.
1690 WINDOW OUTPUT 2: COLOR 2: GOTO 1720: REM black piece maker
1700 RETURN: REM dummy; don't-put-piece subroutine.
1710 REM
1720 REM ***** piece maker *****
1730 cx0=x0+INT(w/2)+x*w : cy0=INT(h/2)+y*h
1740 CIRCLE(cx0,cy0), 12
1750 IF pc=0 THEN 1780
1760 PATTERN red%
1770 PAINT(cx0,cy0)
1780 COLOR 1: WINDOW OUTPUT 3
1790 RETURN
1800 REM
1810 REM
1820 REM ***** Get x, y of mouse when left button pressed.
1830 REM
1840 REM
1850 B% = MOUSE( 0) : IF B%=0 THEN GOTO 1850
1860 WHILE B%<>0: B% = MOUSE( 0): xm%= MOUSE( 1): ym%= MOUSE( 2): WEND
1870 x=INT((xm%-42)/w)-6 :y=INT(ym%/h)
1880 RETURN
1890 REM ***** DRAW GAME BOARD *****
1900 '
1910 '
1920 '
1930 wb=8*w: hb=8*h
1940 x0=30 : COLOR 4
1950 AREA( x0,0): AREA( x0+wb-1,0): AREA( x0+wb-1,hb-1): AREA( x0,hb-1 ): AREAFILL
1960 COLOR 5
1970 AREA (x0,0): AREA (x0+w-1,0): AREA (x0+w-1,h-1): AREA (x0,h-1): AREAFILL
1980 GET(x0,0)-(x0+w,h),gblock%
1990 PUT(x0+w,h),gblock%,PSET
2000 GET(x0,0)-(x0+2*w,2*h),square%
2010 FOR i=x0 TO x0+6*w STEP 2*w
2020 FOR j=0 TO 6*h STEP 2*h
2030 PUT(i,j),square%,PSET
2040 NEXT j,i
2050 REM
2060 REM
2070 REM ***** draw forfeit and quit boxes
2080 REM
2090 COLOR 1, 0: REM
2095 CALL Move( RP&,103,154): PRINT "FORFEIT":CALL Move( RP&, 215, 154): PRINT " QUIT "
2097 CALL Move( RP&, 35,154): PRINT "YES":CALL Move( RP&, 312,154):PRINT " NO"
2100 LINE (90,144)-(170,159),,B : LINE(202,144)-(282,159),,B
2110 LINE (30,144)-(65,159),,B : LINE(307,144)-(342,159),,B
2120 REM
2150 REM
2160 WINDOW OUTPUT 3: COLOR 1
2170 RETURN
2180 x=I6-2:y=J6-2: IF T1=hu THEN GOSUB 1680 :ELSE GOSUB 1690
2190 RETURN
2200 REM SUBRTN TO GET YES OR NO FROM MOUSE.
2210 REM
2220 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3
2230 IF y>7 AND y<10 THEN
IF x=0 THEN
x$="Y"
ELSEIF x=7 THEN
x$="N"
ELSE
x$=""
END IF
ELSE
x$=""
END IF
2240 RETURN